# -*- coding: UTF-8 -*-
"""
Paramètres et configuration de Django.

Les valeurs des paramètres de configuration sont obtenues à partir du module spécifié par
la variable d'environnement DJANGO_SETTINGS_MODULE puis à partir du module
django.conf.global_settings; voyez le fichier contenant les paramètres globaux pour
une liste de toutes les variables possibles.
"""

import os
import sys
from django.conf import global_settings

ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"

# on obtient une référence au module actuel (pourquoi n'existe-t-il pas de variable magique __module__?)
me = sys.modules[__name__]

# on met à jour le dictionnaire du module actuel à partir des paramètres globaux (seuls les paramètres dont le nom est écrit en MAJUSCULES sont importés)
for setting in dir(global_settings):
    if setting == setting.upper():
        setattr(me, setting, getattr(global_settings, setting))

# on essaie de charger DJANGO_SETTINGS_MODULE
try:
    me.SETTINGS_MODULE = os.environ[ENVIRONMENT_VARIABLE]
    if not me.SETTINGS_MODULE: # Si la variable d'environnement est définie mais sa valeur est la chaîne vide.
        raise KeyError
except KeyError:
    raise EnvironmentError, "La variable d'environnement %s n'est pas définie." % ENVIRONMENT_VARIABLE

try:
    mod = __import__(me.SETTINGS_MODULE, '', '', [''])
except ImportError, e:
    raise EnvironmentError, "Impossible d'importer le module '%s' désigné par %s (est-ce qu'il se trouve sur sys.path?) : %s" % (me.SETTINGS_MODULE, ENVIRONMENT_VARIABLE, e)

# Les paramètres suivants doivent être convertis en tuples si l'utilisateur a par
# mégarde spécifié une chaîne.
tuple_settings = ("INSTALLED_APPS", "TEMPLATE_DIRS")

for setting in dir(mod):
    if setting == setting.upper():
        setting_value = getattr(mod, setting)
        if setting in tuple_settings and type(setting_value) == str:
            setting_value = (setting_value,) # Au cas où l'utilisateur ait oublié la virgule.
        setattr(me, setting, setting_value)

# on enregistre la valeur de DJANGO_SETTINGS_MODULE au cas où le code ultérieur en ait besoin
me.SETTINGS_MODULE = os.environ.get(ENVIRONMENT_VARIABLE, '')

# on place les informations concernant le fuseau horaire à l'intérieur de os.environ
os.environ['TZ'] = me.TIME_ZONE

# enfin, on nettoie l'espace de noms actuel
for k in dir(me):
    if not k.startswith('_') and k != 'me' and k != k.upper():
        delattr(me, k)
del me, k
